#include <typescommon.h>

// 大端小端系统
// 大端：高位在前。小端：低位在前。
// 如0x31一个字节,大端二进制是：0B00110001。小端二进制：0B10001100。一个直接，我们打印%d，他的值是一样的，是因为他们虽然存储不一样，但是实际表示同一个数组。
// 网络、串口等通讯协议有自己的规则（包以字节为单位，每个字节先发高/低位）。大小端系统会以通讯协议按位发送与接收。网络传输的一个字节在大小端系统能保证正确性。

/*
一个字节0x12，大端保存为0x12，0B00010010，以网络格式发送出去(未知格式)。
以网络格式(未知格式)解析到本地，得到小端字节：0x12，0B01001000.
没有影响。
*/

/*
但是如果short类型的2个字节从大端发送到小端就会有问题。
short数据十六进制：0x1234（0B0001 0010 0011 0100）.发送出去按字节0x12(0B0001 0010)，0x34(0B0011 0100)。
小端接收到0x12(0B0100 1000)，0x34(0B0010 1100)。放入short变量中，而表达的值为0x3412(0B0100 1000 0010 1100)。
int32,int64同理。
*/

// 
// 如果大端系统和小端系统通讯时，问题就存在了。
// 但是如果int16,int32,int64就会

union myUnion
{
    uint8_t buffer[2];
    uint16_t value;
};


int main(int argc, char **argv)
{
    // 方式一
    union myUnion tmpunion;
    tmpunion.value = 0x1234;
    logdebug("value=0x%x, byte[0]=0x%x, byte[1]=0x%x", tmpunion.value, tmpunion.buffer[0], tmpunion.buffer[1]);

    // 方式二
    uint16_t tmpvalue = 0x1234;
    uint8_t *tmpPointer = (uint8_t *)&tmpvalue;
    logdebug("value=0x%x, byte[0]=0x%x, byte[1]=0x%x", tmpvalue, tmpPointer[0], tmpPointer[1]);

    // 说明linux是小端。
    return 1;
}



